package com.example.controller;

import com.example.model.Result;
import com.example.model.UserInfo;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.servlet.http.HttpSession;

/**
 * 用户控制器
 * 处理用户相关的HTTP请求
 */
@RequestMapping("/user")  // 定义类级别的URL映射，所有方法都以/user开头
@RestController           // 标识这是RESTful控制器，返回值直接写入HTTP响应体
public class UserController {

    @Autowired
    private UserService userService;  // 自动注入UserService实例，Spring容器负责创建和管理

    /**
     * 用户登录接口
     * 处理用户登录请求，验证用户名和密码
     * @param name 用户名
     * @param password 密码
     * @param session HTTP会话对象，用于存储用户登录状态
     * @return 登录结果
     */
    @RequestMapping("/login")
    public Result login(String name, String password, HttpSession session) {
        // 参数校验：检查用户名和密码是否为空
        // StringUtils.hasLength() 是Spring提供的工具方法，判断字符串是否有内容
        if (!StringUtils.hasLength(name) || !StringUtils.hasLength(password)) {
            return Result.fail("用户名或密码不能为空");  // 返回失败结果
        }

        // 根据用户名查询用户信息
        // userService.queryUserByName() 是业务层方法，根据用户名查询用户
        UserInfo userInfo = userService.queryUserByName(name);
        if (userInfo == null) {
            return Result.fail("用户不存在");  // 用户不存在，返回失败
        }

        // 验证密码是否正确
        // 直接比较明文密码（实际项目中应该使用加密比较）
        if (password.equals(userInfo.getPassword())) {
            // 登录成功，将用户信息存入Session
            userInfo.setPassword("");  // 清除密码，不存入Session以保证安全
            session.setAttribute("session_user_key", userInfo);  // 将用户信息存入Session
            return Result.success(true);  // 返回成功结果
        }

        // 密码错误，返回失败
        return Result.fail("密码错误");
    }
}